﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
using Summer.Core.Aop;

#region License
/*
 *  Copyright (c) Dumuzi.cn 2009 , All rights reserved.
 *  CLR Version:  2.0.50727.4927
 *  NameSpace: Summer.Log
 *  Author:Edwin Tai,戴佳顺
 *  Msn:edwin19861218@hotmail.com
 *  QQ: 1961218
 *  Date:2009/10/27 16:37:20
 *  Licensed under the Microsoft Public License (Ms-PL)
 *  This license governs use of the accompanying software. 
 *  If you use the software, you accept this license.
 *  If you do not accept the license, do not use the software.
 */
#endregion

namespace Summer.Log
{
    public class LogAspect : AbstractAspect
    {
        private ILog logger = LogFactory.GetLogger(typeof(IAdvice));
        private bool m_isCalculateTimeout;

        public LogAspect(IMessageSink nextSink, bool isCalculateTimeout)
            : base(nextSink)
        {
            this.m_isCalculateTimeout = isCalculateTimeout;        
        }

        public override IMessage SyncProcessMessage(IMessage msg)
        {   
            IMessage imsg = null;
            if (m_isCalculateTimeout)
            {
                DateTime beforeTime = new DateTime();
                DateTime afterTime = new DateTime();
                imsg = base.SyncProcessMessage(msg,  delegate { beforeTime = DateTime.Now; },  delegate { afterTime = DateTime.Now;  });
                logger.Info("run time " + afterTime.Subtract(beforeTime));
            }
            else
            {
                imsg = base.SyncProcessMessage(msg, null, null);
            }
            return imsg;
        }
    }
}
